V8ã®ã€ã³ã©ã€ã³ãã£ãã·ã¥ãããªã¢ãŒãã£ãºã ãããããã£ã¢ã¯ã»ã¹æé©åæè¡ãæ·±æãããããã©ãŒãã³ã¹ã®é«ãJavaScriptã³ãŒãã®æžãæ¹ãåŠã³ãŸãã
JavaScript V8 ã€ã³ã©ã€ã³ãã£ãã·ã¥ãšããªã¢ãŒãã£ãºã ïŒããããã£ã¢ã¯ã»ã¹æé©åã®åæ
JavaScriptã¯éåžžã«æè»ã§åçãªèšèªã§ããããã®ã€ã³ã¿ããªã¿ãšããŠã®æ§è³ªäžããã°ãã°ããã©ãŒãã³ã¹ã®èª²é¡ã«çŽé¢ããŸããããããGoogleã®V8ïŒChromeãNode.jsã§äœ¿çšïŒã®ãããªçŸä»£ã®JavaScriptãšã³ãžã³ã¯ãåçãªæè»æ§ãšå®è¡é床ã®ã®ã£ãããåããããã«ãé«åºŠãªæé©åæè¡ãæ¡çšããŠããŸãããããã®æè¡ã®äžã§æãéèŠãªãã®ã®äžã€ãã€ã³ã©ã€ã³ãã£ãã·ã¥ã§ãããããããã£ã¢ã¯ã»ã¹ãå€§å¹ ã«é«éåããŸãããã®èšäºã§ã¯ãV8ã®ã€ã³ã©ã€ã³ãã£ãã·ã¥ã¡ã«ããºã ãå æ¬çã«åæãããããã©ã®ããã«ããªã¢ãŒãã£ãºã ãåŠçããããããã£ã¢ã¯ã»ã¹ãæé©åããŠJavaScriptã®ããã©ãŒãã³ã¹ãåäžããããã«çŠç¹ãåœãŠãŸãã
åºæ¬ã®çè§£ïŒJavaScriptã«ãããããããã£ã¢ã¯ã»ã¹
JavaScriptã§ã¯ããªããžã§ã¯ãã®ããããã£ãžã®ã¢ã¯ã»ã¹ã¯åçŽã«èŠããŸãããããèšæ³ïŒobject.propertyïŒããã©ã±ããèšæ³ïŒobject['property']ïŒã䜿çšã§ããŸããããããå
éšã§ã¯ããšã³ãžã³ã¯ããããã£ã«é¢é£ä»ããããå€ãèŠã€ããŠååŸããããã«ãããã€ãã®æäœãå®è¡ããå¿
èŠããããŸãããããã®æäœã¯ãç¹ã«JavaScriptã®åçãªæ§è³ªãèæ
®ãããšãå¿
ãããåçŽã§ã¯ãããŸããã
次ã®äŸãèããŠã¿ãŸãããïŒ
const obj = { x: 10, y: 20 };
console.log(obj.x); // 'x'ããããã£ãžã®ã¢ã¯ã»ã¹
ãšã³ãžã³ã¯ãŸãã以äžã®ããšãè¡ãå¿ èŠããããŸãïŒ
objãæå¹ãªãªããžã§ã¯ãã§ãããã確èªããã- ãªããžã§ã¯ãã®æ§é å
ã§ããããã£
xãèŠã€ããã xã«é¢é£ä»ããããå€ãååŸããã
æé©åããªããã°ãåããããã£ã¢ã¯ã»ã¹ã¯å®å šãªã«ãã¯ã¢ããã䌎ããå®è¡ãé ããªããŸããããã§ã€ã³ã©ã€ã³ãã£ãã·ã¥ã圹ç«ã¡ãŸãã
ã€ã³ã©ã€ã³ãã£ãã·ã¥ïŒããã©ãŒãã³ã¹ããŒã¹ã¿ãŒ
ã€ã³ã©ã€ã³ãã£ãã·ã¥ã¯ã以åã®ã«ãã¯ã¢ããã®çµæããã£ãã·ã¥ããããšã§ããããã£ã¢ã¯ã»ã¹ãé«éåããæé©åæè¡ã§ãããã®äžå¿çãªèãæ¹ã¯ãåãåã®ãªããžã§ã¯ãäžã®åãããããã£ã«è€æ°åã¢ã¯ã»ã¹ããå Žåããšã³ãžã³ã¯ä»¥åã®ã«ãã¯ã¢ããããã®æ å ±ãåå©çšã§ããåé·ãªæ€çŽ¢ãåé¿ã§ãããšãããã®ã§ãã
ä»çµã¿ã¯æ¬¡ã®ãšããã§ãïŒ
- æåã®ã¢ã¯ã»ã¹ïŒããããã£ã«åããŠã¢ã¯ã»ã¹ããããšããšã³ãžã³ã¯å®å šãªã«ãã¯ã¢ããããã»ã¹ãå®è¡ãããªããžã§ã¯ãå ã§ã®ããããã£ã®å Žæãç¹å®ããŸãã
- ãã£ãã·ã¥ïŒãšã³ãžã³ã¯ãããããã£ã®å Žæã«é¢ããæ å ±ïŒäŸïŒã¡ã¢ãªå ã®ãªãã»ããïŒãšãªããžã§ã¯ãã®é ãã¯ã©ã¹ïŒè©³çްã¯åŸè¿°ïŒããã¢ã¯ã»ã¹ãå®è¡ããç¹å®ã®ã³ãŒãè¡ã«é¢é£ä»ããããå°ããªã€ã³ã©ã€ã³ãã£ãã·ã¥ã«ä¿åããŸãã
- åŸç¶ã®ã¢ã¯ã»ã¹ïŒåãã³ãŒãã®å Žæããåãããããã£ã«åŸç¶ã§ã¢ã¯ã»ã¹ããå Žåããšã³ãžã³ã¯ãŸãã€ã³ã©ã€ã³ãã£ãã·ã¥ããã§ãã¯ããŸãããã£ãã·ã¥ã«ãªããžã§ã¯ãã®çŸåšã®é ãã¯ã©ã¹ã«å¯Ÿããæå¹ãªæ å ±ãå«ãŸããŠããå Žåããšã³ãžã³ã¯å®å šãªã«ãã¯ã¢ãããå®è¡ããã«ããããã£å€ãçŽæ¥ååŸã§ããŸãã
ãã®ãã£ãã·ã¥ã¡ã«ããºã ã¯ãç¹ã«ã«ãŒãã颿°ã®ãããªé »ç¹ã«å®è¡ãããã³ãŒãã»ã¯ã·ã§ã³ã«ãããŠãããããã£ã¢ã¯ã»ã¹ã®ãªãŒããŒããããå€§å¹ ã«åæžã§ããŸãã
é ãã¯ã©ã¹ïŒå¹ççãªãã£ãã·ã¥ã®éµ
ã€ã³ã©ã€ã³ãã£ãã·ã¥ãçè§£ããããã®éèŠãªæŠå¿µãé ãã¯ã©ã¹ïŒããããŸãã¯ã·ã§ã€ããšãåŒã°ããïŒã§ããé ãã¯ã©ã¹ã¯ãV8ãJavaScriptãªããžã§ã¯ãã®æ§é ã衚çŸããããã«äœ¿çšããå éšããŒã¿æ§é ã§ãããããã¯ãªããžã§ã¯ããæã€ããããã£ãšã¡ã¢ãªå ã§ã®ã¬ã€ã¢ãŠããèšè¿°ããŸãã
V8ã¯ãåãªããžã§ã¯ãã«çŽæ¥åæ å ±ãé¢é£ä»ãã代ããã«ãåãæ§é ãæã€ãªããžã§ã¯ããåãé ãã¯ã©ã¹ã«ã°ã«ãŒãåããŸããããã«ããããšã³ãžã³ã¯ãªããžã§ã¯ãã以åã«èŠããªããžã§ã¯ããšåãæ§é ãæã£ãŠãããã©ãããå¹ççã«ãã§ãã¯ã§ããŸãã
æ°ãããªããžã§ã¯ããäœæããããšãV8ã¯ãã®ããããã£ã«åºã¥ããŠé ãã¯ã©ã¹ãå²ãåœãŠãŸãã2ã€ã®ãªããžã§ã¯ããåãããããã£ãåãé åºã§æã£ãŠããå Žåããããã¯åãé ãã¯ã©ã¹ãå ±æããŸãã
次ã®äŸãèããŠã¿ãŸãããïŒ
const obj1 = { x: 10, y: 20 };
const obj2 = { x: 5, y: 15 };
const obj3 = { y: 30, x: 40 }; // ããããã£ã®é åºãç°ãªã
// obj1ãšobj2ã¯åãé ãã¯ã©ã¹ãå
±æããå¯èœæ§ãé«ã
// obj3ã¯ç°ãªãé ãã¯ã©ã¹ãæã€
ãªããžã§ã¯ãã«ããããã£ã远å ãããé åºã¯ããªããžã§ã¯ãã®é ãã¯ã©ã¹ã決å®ããããéèŠã§ããåãããããã£ãæã£ãŠããŠãå®çŸ©ãããé åºãç°ãªããªããžã§ã¯ãã«ã¯ãç°ãªãé ãã¯ã©ã¹ãå²ãåœãŠãããŸããã€ã³ã©ã€ã³ãã£ãã·ã¥ã¯ãã£ãã·ã¥ãããããããã£ã®å ŽæããŸã æå¹ãã©ããã倿ããããã«é ãã¯ã©ã¹ã«äŸåãããããããã¯ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
ããªã¢ãŒãã£ãºã ãšã€ã³ã©ã€ã³ãã£ãã·ã¥ã®æå
ããªã¢ãŒãã£ãºã ãã€ãŸã颿°ãã¡ãœãããç°ãªãåã®ãªããžã§ã¯ããæäœã§ããèœåã¯ãã€ã³ã©ã€ã³ãã£ãã·ã¥ã«ãšã£ãŠèª²é¡ãšãªããŸããJavaScriptã®åçãªæ§è³ªã¯ããªã¢ãŒãã£ãºã ãä¿é²ããŸãããããã¯ç°ãªãã³ãŒããã¹ããªããžã§ã¯ãæ§é ã«ã€ãªãããã€ã³ã©ã€ã³ãã£ãã·ã¥ãç¡å¹ã«ããå¯èœæ§ããããŸãã
ç¹å®ã®ããããã£ã¢ã¯ã»ã¹ãµã€ãã§ééããç°ãªãé ãã¯ã©ã¹ã®æ°ã«åºã¥ããŠãã€ã³ã©ã€ã³ãã£ãã·ã¥ã¯æ¬¡ã®ããã«åé¡ã§ããŸãïŒ
- ã¢ãã¢ãŒãã£ãã¯ïŒããããã£ã¢ã¯ã»ã¹ãµã€ããåäžã®é ãã¯ã©ã¹ã®ãªããžã§ã¯ãã«ããééããããšããªãç¶æ ãããã¯ã€ã³ã©ã€ã³ãã£ãã·ã¥ã«ãšã£ãŠçæ³çãªã·ããªãªã§ããããšã³ãžã³ã¯ãã£ãã·ã¥ãããããããã£ã®å Žæãèªä¿¡ãæã£ãŠåå©çšã§ããŸãã
- ããªã¢ãŒãã£ãã¯ïŒããããã£ã¢ã¯ã»ã¹ãµã€ããè€æ°ïŒéåžžã¯å°æ°ïŒã®é ãã¯ã©ã¹ã®ãªããžã§ã¯ãã«ééããç¶æ ããšã³ãžã³ã¯è€æ°ã®æœåšçãªããããã£ã®å ŽæãåŠçããå¿ èŠããããŸããV8ã¯ããªã¢ãŒãã£ãã¯ãªã€ã³ã©ã€ã³ãã£ãã·ã¥ããµããŒãããŠãããé ãã¯ã©ã¹ãšããããã£ã®å Žæã®ãã¢ã®å°ããªããŒãã«ãæ ŒçŽããŸãã
- ã¡ã¬ã¢ãŒãã£ãã¯ïŒããããã£ã¢ã¯ã»ã¹ãµã€ããéåžžã«å€æ°ã®ç°ãªãé ãã¯ã©ã¹ã®ãªããžã§ã¯ãã«ééããç¶æ ããã®ã·ããªãªã§ã¯ããšã³ãžã³ããã¹ãŠã®å¯èœãªé ãã¯ã©ã¹ãšããããã£ã®å Žæã®ãã¢ãå¹ççã«æ ŒçŽã§ããªããããã€ã³ã©ã€ã³ãã£ãã·ã¥ã¯å¹æããªããªããŸããã¡ã¬ã¢ãŒãã£ãã¯ãªå ŽåãV8ã¯éåžžãããé ããããäžè¬çãªããããã£ã¢ã¯ã»ã¹ã¡ã«ããºã ã«é ŒããŸãã
ãããäŸã§ç€ºããŸãããïŒ
function getX(obj) {
return obj.x;
}
const obj1 = { x: 10, y: 20 };
const obj2 = { x: 5, z: 15 };
const obj3 = { x: 7, a: 8, b: 9 };
console.log(getX(obj1)); // æåã®åŒã³åºãïŒã¢ãã¢ãŒãã£ãã¯
console.log(getX(obj2)); // 2åç®ã®åŒã³åºãïŒããªã¢ãŒãã£ãã¯ïŒ2ã€ã®é ãã¯ã©ã¹ïŒ
console.log(getX(obj3)); // 3åç®ã®åŒã³åºãïŒã¡ã¬ã¢ãŒãã£ãã¯ã«ãªãå¯èœæ§ããïŒé ãã¯ã©ã¹ãæ°åãè¶
ããïŒ
ãã®äŸã§ã¯ãgetX颿°ã¯æåã¯ã¢ãã¢ãŒãã£ãã¯ã§ãããªããªããæåã¯obj1ã®ãããªåãé ãã¯ã©ã¹ãæã€ãªããžã§ã¯ãã®ã¿ãæäœããããã§ããããããobj2ã§åŒã³åºããããšãã€ã³ã©ã€ã³ãã£ãã·ã¥ã¯ããªã¢ãŒãã£ãã¯ã«ãªããŸãããªããªããä»åºŠã¯2ã€ã®ç°ãªãé ãã¯ã©ã¹ïŒobj1ãobj2ã®ãããªãªããžã§ã¯ãïŒãæã€ãªããžã§ã¯ããåŠçããå¿
èŠãããããã§ããobj3ã§åŒã³åºããããšããšã³ãžã³ã¯ããŸãã«ãå€ãã®é ãã¯ã©ã¹ã«ééããããã«ã€ã³ã©ã€ã³ãã£ãã·ã¥ãç¡å¹ã«ããªããã°ãªããªããªããããããã£ã¢ã¯ã»ã¹ã¯æé©åããã«ãããªããŸãã
ããªã¢ãŒãã£ãºã ãããã©ãŒãã³ã¹ã«äžãã圱é¿
ããªã¢ãŒãã£ãºã ã®åºŠåãã¯ãããããã£ã¢ã¯ã»ã¹ã®ããã©ãŒãã³ã¹ã«çŽæ¥åœ±é¿ããŸããã¢ãã¢ãŒãã£ãã¯ãªã³ãŒããäžè¬çã«æãéããã¡ã¬ã¢ãŒãã£ãã¯ãªã³ãŒããæãé ããªããŸãã
- ã¢ãã¢ãŒãã£ãã¯ïŒçŽæ¥çãªãã£ãã·ã¥ãããã«ãããæãé«éãªããããã£ã¢ã¯ã»ã¹ã
- ããªã¢ãŒãã£ãã¯ïŒã¢ãã¢ãŒãã£ãã¯ããã¯é ãã§ãããç¹ã«å°æ°ã®ç°ãªããªããžã§ã¯ãåã®å ŽåããŸã åççã«å¹ççã§ããã€ã³ã©ã€ã³ãã£ãã·ã¥ã¯éãããæ°ã®é ãã¯ã©ã¹/ããããã£ãã±ãŒã·ã§ã³ã®ãã¢ãä¿åã§ããŸãã
- ã¡ã¬ã¢ãŒãã£ãã¯ïŒãã£ãã·ã¥ãã¹ãšãããè€éãªããããã£æ€çŽ¢æŠç¥ã®å¿ èŠæ§ã«ãããå€§å¹ ã«é ããªããŸãã
ããªã¢ãŒãã£ãºã ãæå°éã«æããããšã¯ãJavaScriptã³ãŒãã®ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããã¢ãã¢ãŒãã£ãã¯ããããã¯ææªã§ãããªã¢ãŒãã£ãã¯ãªã³ãŒããç®æãããšããéèŠãªæé©åæŠç¥ã§ãã
å®è·µçãªäŸãšæé©åæŠç¥
ããã§ã¯ãV8ã®ã€ã³ã©ã€ã³ãã£ãã·ã¥ã掻çšããããªã¢ãŒãã£ãºã ã®æªåœ±é¿ãæå°éã«æããããã®å®è·µçãªäŸãšæŠç¥ãããã€ãèŠãŠãããŸãããã
1. äžè²«ãããªããžã§ã¯ãã·ã§ã€ã
åã颿°ã«æž¡ããããªããžã§ã¯ããäžè²«ããæ§é ãæã€ããã«ããŠãã ãããããããã£ãåçã«è¿œå ããã®ã§ã¯ãªããäºåã«ãã¹ãŠå®çŸ©ããŸãã
æªãäŸïŒåçãªããããã£è¿œå ïŒïŒ
function Point(x, y) {
this.x = x;
this.y = y;
}
const p1 = new Point(10, 20);
const p2 = new Point(5, 15);
if (Math.random() > 0.5) {
p1.z = 30; // ããããã£ãåçã«è¿œå
}
function printPointX(point) {
console.log(point.x);
}
printPointX(p1);
printPointX(p2);
ãã®äŸã§ã¯ãp1ã¯zããããã£ãæã€ãããããŸããããp2ã¯æããªããããç°ãªãé ãã¯ã©ã¹ã«ã€ãªãããprintPointXã®ããã©ãŒãã³ã¹ãäœäžããŸãã
è¯ãäŸïŒäžè²«ããããããã£å®çŸ©ïŒïŒ
function Point(x, y, z) {
this.x = x;
this.y = y;
this.z = z === undefined ? undefined : z; // 'z'ãundefinedã§ãã£ãŠãåžžã«å®çŸ©ãã
}
const p1 = new Point(10, 20, 30);
const p2 = new Point(5, 15);
function printPointX(point) {
console.log(point.x);
}
printPointX(p1);
printPointX(p2);
zããããã£ãåžžã«å®çŸ©ããããšã§ãããšããããundefinedã§ãã£ãŠãããã¹ãŠã®Pointãªããžã§ã¯ããåãé ãã¯ã©ã¹ãæã€ããšãä¿èšŒããŸãã
2. ããããã£ã®åé€ãé¿ãã
ãªããžã§ã¯ãããããããã£ãåé€ãããšããã®é ãã¯ã©ã¹ã倿Žãããã€ã³ã©ã€ã³ãã£ãã·ã¥ãç¡å¹ã«ãªãå¯èœæ§ããããŸããå¯èœã§ããã°ããããã£ã®åé€ã¯é¿ããŠãã ããã
æªãäŸïŒããããã£ã®åé€ïŒïŒ
const obj = { a: 1, b: 2, c: 3 };
delete obj.b;
function accessA(object) {
return object.a;
}
accessA(obj);
obj.bãåé€ãããšobjã®é ãã¯ã©ã¹ã倿ŽãããaccessAã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
è¯ãäŸïŒundefinedã«èšå®ïŒïŒ
const obj = { a: 1, b: 2, c: 3 };
obj.b = undefined; // åé€ãã代ããã«undefinedã«èšå®
function accessA(object) {
return object.a;
}
accessA(obj);
ããããã£ãundefinedã«èšå®ãããšããªããžã§ã¯ãã®é ãã¯ã©ã¹ãä¿æãããã€ã³ã©ã€ã³ãã£ãã·ã¥ã®ç¡å¹åãé¿ããããšãã§ããŸãã
3. ãã¡ã¯ããªé¢æ°ã䜿çšãã
ãã¡ã¯ããªé¢æ°ã¯ãäžè²«ãããªããžã§ã¯ãã·ã§ã€ãã匷å¶ããããªã¢ãŒãã£ãºã ãæžããã®ã«åœ¹ç«ã¡ãŸãã
æªãäŸïŒäžè²«æ§ã®ãªããªããžã§ã¯ãçæïŒïŒ
function createObject(type, data) {
if (type === 'A') {
return { x: data.x, y: data.y };
} else if (type === 'B') {
return { a: data.a, b: data.b };
}
}
const objA = createObject('A', { x: 10, y: 20 });
const objB = createObject('B', { a: 5, b: 15 });
function processX(obj) {
return obj.x;
}
processX(objA);
processX(objB); // 'objB'ã«ã¯'x'ããªããåé¡ãšããªã¢ãŒãã£ãºã ãåŒãèµ·ãã
ããã«ãããéåžžã«ç°ãªãã·ã§ã€ããæã€ãªããžã§ã¯ããåã颿°ã«ãã£ãŠåŠçãããããšã«ãªããããªã¢ãŒãã£ãºã ãå¢å ããŸãã
è¯ãäŸïŒäžè²«ããã·ã§ã€ããæã€ãã¡ã¯ããªé¢æ°ïŒïŒ
function createObjectA(data) {
return { x: data.x, y: data.y, a: undefined, b: undefined }; // äžè²«ããããããã£ã匷å¶
}
function createObjectB(data) {
return { x: undefined, y: undefined, a: data.a, b: data.b }; // äžè²«ããããããã£ã匷å¶
}
const objA = createObjectA({ x: 10, y: 20 });
const objB = createObjectB({ a: 5, b: 15 });
function processX(obj) {
return obj.x;
}
// ããã¯çŽæ¥processXãå©ããããã§ã¯ãããŸããããåã®æ··ä¹±ãé¿ããããã®è¯ãå®è·µäŸã§ãã
// å®éã®ã·ããªãªã§ã¯ãAãšBã«å¯ŸããŠããå
·äœçãªé¢æ°ãå¿
èŠã«ãªãã§ãããã
// ããªã¢ãŒãã£ãºã ãçºçæºã§æžããããã®ãã¡ã¯ããªé¢æ°ã®äœ¿çšæ³ã瀺ãç®çã§ããã®æ§é ã¯æçã§ãã
ãã®ã¢ãããŒãã¯ãããå€ãã®æ§é ãå¿ èŠãšããŸãããç¹å®ã®åããšã«äžè²«ãããªããžã§ã¯ãã®äœæãä¿é²ãããããã®ãªããžã§ã¯ãåãå ±éã®åŠçã·ããªãªã«é¢äžããéã®ããªã¢ãŒãã£ãºã ã®ãªã¹ã¯ãäœæžããŸãã
4. é åå ã®æ··ååãé¿ãã
ç°ãªãåã®èŠçŽ ãå«ãé åã¯ãåã®æ··ä¹±ãšããã©ãŒãã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸããåãåã®èŠçŽ ãä¿æããé åã䜿çšããããã«ããŠãã ããã
æªãäŸïŒé åå ã®æ··ååïŒïŒ
const arr = [1, 'hello', { x: 10 }];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
ãšã³ãžã³ãé åå ã®ç°ãªãåã®èŠçŽ ãåŠçããªããã°ãªããªããããããã¯ããã©ãŒãã³ã¹ã®åé¡ã«ã€ãªããå¯èœæ§ããããŸãã
è¯ãäŸïŒé åå ã®äžè²«ããåïŒïŒ
const arr = [1, 2, 3]; // æ°å€ã®é
å
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
äžè²«ããèŠçŽ åãæã€é åã䜿çšãããšããšã³ãžã³ã¯é åã¢ã¯ã»ã¹ããã广çã«æé©åã§ããŸãã
5. åãã³ãã®äœ¿çšïŒæ³šæããŠïŒ
äžéšã®JavaScriptã³ã³ãã€ã©ãããŒã«ã§ã¯ãã³ãŒãã«åãã³ãã远å ã§ããŸããJavaScriptèªäœã¯åçåä»ãã§ããããããã®ãã³ãã¯ãšã³ãžã³ã«ã³ãŒããæé©åããããã®ããå€ãã®æ å ±ãæäŸã§ããŸãããã ããåãã³ããå€çšãããšã³ãŒãã®æè»æ§ãäœäžããä¿å®ãé£ãããªãå¯èœæ§ããããããæ éã«äœ¿çšããŠãã ããã
äŸïŒTypeScriptã®åãã³ãã䜿çšïŒïŒ
function add(a: number, b: number): number {
return a + b;
}
console.log(add(5, 10));
TypeScriptã¯åãã§ãã¯ãæäŸããåã«é¢é£ããæœåšçãªããã©ãŒãã³ã¹åé¡ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããã³ã³ãã€ã«ãããJavaScriptã«ã¯åãã³ãããããŸããããTypeScriptã䜿çšããããšã§ãã³ã³ãã€ã©ã¯JavaScriptã³ãŒããã©ã®ããã«æé©åããããããããçè§£ã§ããŸãã
V8ã®é«åºŠãªæŠå¿µãšèæ ®äºé
ããã«æ·±ãæé©åã®ããã«ã¯ãV8ã®ç°ãªãã³ã³ãã€ã«å±€ã®çžäºäœçšãçè§£ããããšãæçã§ãã
- Ignition: V8ã®ã€ã³ã¿ããªã¿ã§ãæåã«JavaScriptã³ãŒããå®è¡ãã責任ããããŸããæé©åãå°ãããã®ãããã¡ã€ãªã³ã°ããŒã¿ãåéããŸãã
- TurboFan: V8ã®æé©åã³ã³ãã€ã©ãIgnitionããã®ãããã¡ã€ãªã³ã°ããŒã¿ã«åºã¥ããTurboFanã¯é »ç¹ã«å®è¡ãããã³ãŒããé«åºŠã«æé©åããããã·ã³ã³ãŒãã«ã³ã³ãã€ã«ããŸããTurboFanã¯å¹æçãªæé©åã®ããã«ã€ã³ã©ã€ã³ãã£ãã·ã¥ãšé ãã¯ã©ã¹ã«å€§ããäŸåããŠããŸãã
æåã«Ignitionã«ãã£ãŠå®è¡ãããã³ãŒãã¯ãåŸã§TurboFanã«ãã£ãŠæé©åãããå¯èœæ§ããããŸãããããã£ãŠãã€ã³ã©ã€ã³ãã£ãã·ã¥ãšé ãã¯ã©ã¹ã«åªããã³ãŒããæžãããšã¯ãæçµçã«TurboFanã®æé©åèœåã®æ©æµãåããããšã«ãªããŸãã
å®äžçãžã®åœ±é¿ïŒã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³
äžèšã§è°è«ããååã¯ãéçºè ã®å°ççãªå Žæã«é¢ä¿ãªãé¢é£æ§ããããŸãããããããããã®æé©åã®åœ±é¿ã¯ãç¹ã«æ¬¡ã®ãããªã·ããªãªã§éèŠã«ãªãå¯èœæ§ããããŸãïŒ
- ã¢ãã€ã«ããã€ã¹ïŒåŠçèœåãšããããªãŒå¯¿åœãéãããŠããã¢ãã€ã«ããã€ã¹ã«ãšã£ãŠãJavaScriptã®ããã©ãŒãã³ã¹æé©åã¯äžå¯æ¬ ã§ããæé©åãäžååãªã³ãŒãã¯ãããã©ãŒãã³ã¹ã®äœäžãããããªãŒæ¶è²»ã®å¢å ã«ã€ãªããå¯èœæ§ããããŸãã
- é«ãã©ãã£ãã¯ã®ãŠã§ããµã€ãïŒå€æ°ã®ãŠãŒã¶ãŒãæã€ãŠã§ããµã€ãã§ã¯ãããããªããã©ãŒãã³ã¹ã®æ¹åã§ããå€§å¹ ãªã³ã¹ãåæžãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžã«ã€ãªãããŸããJavaScriptãæé©åããããšã§ããµãŒããŒã®è² è·ã軜æžããããŒãžã®èªã¿èŸŒã¿æéãæ¹åã§ããŸãã
- IoTããã€ã¹ïŒå€ãã®IoTããã€ã¹ã¯JavaScriptã³ãŒããå®è¡ããŸãããã®ã³ãŒããæé©åããããšã¯ããããã®ããã€ã¹ã®åæ»ãªåäœãä¿èšŒããæ¶è²»é»åãæå°éã«æããããã«äžå¯æ¬ ã§ãã
- ã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ïŒReact NativeãElectronã®ãããªãã¬ãŒã ã¯ãŒã¯ã§æ§ç¯ãããã¢ããªã±ãŒã·ã§ã³ã¯ãJavaScriptã«å€§ããäŸåããŠããŸãããããã®ã¢ããªã±ãŒã·ã§ã³ã®JavaScriptã³ãŒããæé©åããããšã§ãç°ãªããã©ãããã©ãŒã éã§ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
äŸãã°ãã€ã³ã¿ãŒããã垯åãéãããŠããéçºéäžåœã§ã¯ããã¡ã€ã«ãµã€ãºãåæžããèªã¿èŸŒã¿æéãæ¹åããããã«JavaScriptãæé©åããããšããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«ç¹ã«éèŠã§ããåæ§ã«ãã°ããŒãã«ãªé¡§å®¢ã察象ãšããeã³ããŒã¹ãã©ãããã©ãŒã ã§ã¯ãããã©ãŒãã³ã¹ã®æé©åãçŽåž°çãæžãããã³ã³ããŒãžã§ã³çãé«ããã®ã«åœ¹ç«ã¡ãŸãã
ããã©ãŒãã³ã¹ãåæã»æ¹åããããã®ããŒã«
JavaScriptã³ãŒãã®ããã©ãŒãã³ã¹ãåæããæ¹åããã®ã«åœ¹ç«ã€ããã€ãã®ããŒã«ããããŸãïŒ
- Chrome DevToolsïŒChrome DevToolsã¯ãã³ãŒãå ã®ããã©ãŒãã³ã¹ããã«ããã¯ãç¹å®ããã®ã«åœ¹ç«ã€åŒ·åãªãããã¡ã€ãªã³ã°ããŒã«ã»ãããæäŸããŸããããã©ãŒãã³ã¹ããã«ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã¯ãã£ããã£ã®ã¿ã€ã ã©ã€ã³ãèšé²ããCPU䜿çšçãã¡ã¢ãªå²ãåœãŠãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãåæããŸãã
- Node.js ProfilerïŒNode.jsã¯ããµãŒããŒãµã€ãã®JavaScriptã³ãŒãã®ããã©ãŒãã³ã¹ãåæããã®ã«åœ¹ç«ã€çµã¿èŸŒã¿ãããã¡ã€ã©ãæäŸããŸããNode.jsã¢ããªã±ãŒã·ã§ã³ãå®è¡ããéã«
--profãã©ã°ã䜿çšããŠãããã¡ã€ãªã³ã°ãã¡ã€ã«ãçæããŸãã - LighthouseïŒLighthouseã¯ããŠã§ãããŒãžã®ããã©ãŒãã³ã¹ãã¢ã¯ã»ã·ããªãã£ãSEOãç£æ»ãããªãŒãã³ãœãŒã¹ããŒã«ã§ãããŠã§ããµã€ããæ¹åã§ããé åã«é¢ãã貎éãªæŽå¯ãæäŸã§ããŸãã
- Benchmark.jsïŒBenchmark.jsã¯ãç°ãªãã³ãŒãã¹ããããã®ããã©ãŒãã³ã¹ãæ¯èŒã§ããJavaScriptãã³ãããŒã¯ã©ã€ãã©ãªã§ããæé©åã®åãçµã¿ã®åœ±é¿ã枬å®ããããã«Benchmark.jsã䜿çšããŸãã
çµè«
V8ã®ã€ã³ã©ã€ã³ãã£ãã·ã¥ã¡ã«ããºã ã¯ãJavaScriptã«ãããããããã£ã¢ã¯ã»ã¹ãå€§å¹ ã«é«éåãã匷åãªæé©åæè¡ã§ããã€ã³ã©ã€ã³ãã£ãã·ã¥ã®ä»çµã¿ãããªã¢ãŒãã£ãºã ãããã«äžãã圱é¿ãçè§£ããå®è·µçãªæé©åæŠç¥ãé©çšããããšã§ãããããã©ãŒãã³ã¹ã®é«ãJavaScriptã³ãŒããæžãããšãã§ããŸããäžè²«ããã·ã§ã€ããæã€ãªããžã§ã¯ãã®äœæãããããã£åé€ã®åé¿ãåã®ããªãšãŒã·ã§ã³ã®æå°åãäžå¯æ¬ ãªå®è·µã§ããããšãå¿ããªãã§ãã ãããã³ãŒãåæãšãã³ãããŒã¯ã®ããã®ææ°ããŒã«ã䜿çšããããšããJavaScriptæé©åæè¡ã®å©ç¹ãæå€§åããäžã§éèŠãªåœ¹å²ãæãããŸãããããã®åŽé¢ã«çŠç¹ãåœãŠãããšã§ãäžçäžã®éçºè ã¯ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãã倿§ãªãã©ãããã©ãŒã ãç°å¢ã«ããã£ãŠãªãœãŒã¹äœ¿çšãæé©åããããšãã§ããŸãã
åçãªJavaScriptãšã³ã·ã¹ãã ã«ãããŠæé©åãããã¢ããªã±ãŒã·ã§ã³ãç¶æããããã«ã¯ãç¶ç¶çã«ã³ãŒããè©äŸ¡ããããã©ãŒãã³ã¹ã®æŽå¯ã«åºã¥ããŠå®è·µã調æŽããããšãäžå¯æ¬ ã§ãã